home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / dev / c / chunky.readme < prev    next >
Text File  |  1998-03-07  |  10KB  |  297 lines

  1. Short:    Link library for fast chunky-gfx-routines
  2. Author:   pernathw@cip.ub.uni-muenchen.de (Wanja Pernath)
  3. Uploader: Author
  4. Version:  1.0
  5. Type:     dev/c
  6. Requires: AGA, OS3.x, MC68020 + some FASTRAM
  7.  
  8. INTRODUCTION
  9. ============
  10.  
  11. A while ago I've tried to code a game for  the  Amiga  which  should  have  SVGA
  12. quality.  But  I don't have expected the sillyness of Commodore as they designed
  13. the new AGA-Custom chips. My tears have washed my t-shirt when I saw the 'great'
  14. chip-ram-bandwidth and my neighbours thought of a bloody-mess as I expected that
  15. the Blitter is simply useless when it comes to a display of 640x480x256
  16.  
  17. After a while I saw that the cpu is several times faster  in  blitting  with  or
  18. without a mask and later I expected that it is more-than-10-times as fast as the
  19. system graphics routines when I  use  a  temporary  chunky  buffer  to  draw  my
  20. graphics in and then blast it over the bitmap.
  21.  
  22. That  was  the  time  I  decided  to  code  a  chunky-graphics-link-library  for
  23. everybody's use.
  24.  
  25. And that's it.
  26.  
  27.  
  28. CONTENTS
  29. ========
  30.  
  31. When you receive a copy of chunky.lha, it should contain this files:
  32.  
  33. lib-src/
  34.   chunky.c            the main chunky-gfx-routines
  35.   chunky.h            the header file
  36.   text.c              functions for rendering text
  37.   c2p.asm             a simple chunky to planar routine by Morten Eriksen
  38.   p2c.asm             a simple planar to chunky routine by Morten Eriksen
  39.   makefile            a makefile for GNU/C
  40.   libchunky.a         the link lib for GNU/C
  41.  
  42. tst-src/
  43.   chunky.h            a copy of the above
  44.   test1.c             the lines test source
  45.   test2.c             the Insertion test source
  46.   test3.c             the text test source
  47.   test4.c             the fixed-width font test for WB
  48.  
  49. chunky.readme         this file
  50. test1                 the lines test executable
  51. test2                 the Insertion test executable
  52. test3                 the text test executable
  53. test4                 the fixed-width font test for WB
  54. results040.txt        all test results for a MC68040
  55. results030.txt        all test results for a MC68030
  56.  
  57.  
  58. TIME TABLE
  59. ==========
  60.  
  61. This is the result of the program 'test' which opens a  display  of  640x480x256
  62. and  calls  several  timed graphic routines with the original gfx.OS and with my
  63. new gfx.chunky.
  64.  
  65. Test-Machine: A1200 with MC68040 and 8MB Fast
  66.  
  67. I suppose, you should have a MC68030 + 4MB as minimum
  68.  
  69.  
  70. 1. Several Graphic functions ( test1.c )
  71. ----------------------------------------
  72.   I've timed DrawChunkyPort() seperatly to make the results clearer.
  73.  
  74.   Draw 640 vertical lines with color raising:
  75.   Elapsed time for function v_lines_chk():    0.195829 sec.
  76.   Elapsed time for function v_lines_rpt():    12.308480 sec.
  77.  
  78.   Draw 480 horizontal lines with color raising:
  79.   Elapsed time for function h_lines_chk():    0.058839 sec.
  80.   Elapsed time for function h_lines_rpt():    12.255457 sec.
  81.  
  82.   Draw 480 diagonal lines from 0/0 -> 640/y with color raising:
  83.   Elapsed time for function s_lines_chk():    0.418446 sec.
  84.   Elapsed time for function s_lines_rpt():    12.247091 sec.
  85.  
  86.   Draw 256 filled boxes with color raising from 0->255:
  87.   Elapsed time for function rect1_chk():      0.052174 sec.
  88.   Elapsed time for function rect1_rpt():      0.873216 sec.
  89.  
  90.   Time to convert the 640x480x256 ChunkyPort to the display:
  91.   Elapsed time for function DrawChunkyPort(): 0.299809 sec.
  92.  
  93.  
  94. 2. Draw on background ( test2.c )
  95. ---------------------------------
  96.   The first function creates its own ChunkyPort, draws there and
  97.   then copy the chunkyContents into the RastPort w/o destroying
  98.   background gfx
  99.  
  100.   The second one creates its ChunkyPort from RastPort at the position
  101.   of the later rewritten ChunkyBuffer. This ensures that all the rendering
  102.   does not destroy the background.
  103.  
  104.   As you can see, the second one is four times as fast as the first one
  105.  
  106.   Elapsed time for function InsertChunkyPort():         0.417537 sec.
  107.   Elapsed time for function CreateChunkyFromRastPort(): 0.108726 sec.
  108.  
  109.  
  110. 3. Draw some text ( test3.c )
  111. -----------------------------
  112.   This program writes 512 times the text 'This is a test...' with
  113.   different colors onto the screen
  114.  
  115.   The font is set to 'courier.font/13'
  116.   Elapsed time for function chk_test: 0.721666 sec.
  117.   Elapsed time for function rpt_test: 3.921369 sec.
  118.  
  119.  
  120. 4. Fixed-Font-Width test ( test4.c )
  121. ------------------------------------
  122.   This is only present, because I've expected last-minute that the fixed-width
  123.   fonts do not use the TextFont->tf_CharSpace and TextFont->tf_CharKern entries.
  124.   Indeed this pointers are set to NULL --> GURU on some times.
  125.  
  126.   Now I use a better TextLength-Algorithm and Text()- one, so you can use those
  127.   fixed-width-bitmapped fonts, too.
  128.  
  129.  
  130. FUNCTIONS
  131. =========
  132.  
  133. The functions in libchunky.a are namely the same as in the Amiga OS. The
  134. exeption is the suffix 'Chk'
  135.  
  136. See lib-src/*.c for more details.
  137.  
  138.  
  139. USAGE
  140. =====
  141.  
  142. Very simple. Open your screen with preferrable 256 colors and setup the
  143. so-called 'struct ChunkyPort' using the function like this:
  144.  
  145.   ...
  146.   struct ChunkyPort *cp;
  147.   struct RastPort   *rport = INITIALIZE_IT;
  148.  
  149.   // Initialize ChunkyPort
  150.   if( cp = InitChunkyPort( CHUNKY_SIZEX, CHUNKY_SIZEY ) ){
  151.  
  152.     // Do your rendering here
  153.     ...
  154.     SetAPenChk( cp, x );
  155.     RectFillChk( cp, x1, y1, x2, y2 );
  156.     ...
  157.  
  158.     // Blast the ChunkyPort onto the screen
  159.     DrawChunkyPort( cp, rport, POS_ON_SCREEN_X, POS_ON_SCREEN_Y );
  160.     FreeChunkyPort( cp );
  161.   }
  162.   ...
  163.  
  164. Now you're able to use most of the chunky-rendering functions, except the
  165. text ones. To use text-rendering, you _MUST_ first call SetFontChk():
  166.  
  167.   ...
  168.   struct ChunkyPort *cp;
  169.   struct RastPort   *rport = INITIALIZE_IT;
  170.  
  171.   if( cp = InitChunkyPort( CHUNKY_SIZEX, CHUNKY_SIZEY ) ){
  172.  
  173.     // Setup the struct TextFont you want to use
  174.     SetFontChk( cp, rport->Font );
  175.  
  176.     // Do your rendering here
  177.  
  178.     SetAPenChk(cp, x);
  179.     MoveChk( cp, 100, 100 );
  180.     TextChk( cp, "Hi, my name is Wanja" );
  181.  
  182.     // Blast the ChunkyPort onto the screen
  183.     DrawChunkyPort( cp, rport, POS_ON_SCREEN_X, POS_ON_SCREEN_Y );
  184.  
  185.     // Free ChunkyPort
  186.     FreeChunkyPort( cp );
  187.   }
  188.   ...
  189.  
  190. See tst-src/test#? for further details
  191.  
  192.  
  193. DISCLAIMER & THANKS
  194. ===================
  195.  
  196. libchunky.a and all the corresponding files are FREEWARE. Spread it  around  the
  197. world as much as you can, but please remember to spread the full archive. If you
  198. have used the whole or a part of  libchunky.a's  code  and  files,  remember  to
  199. mention me.
  200.  
  201. I've used libchunky.a for a while and I've not expected any bugs, but I can't be
  202. sure of this. If you found a bug (or two), I would be glad to hear from you.
  203.  
  204. In other words: I take no responsibility for any crashes that might occur during
  205. developement or during execution of the executable program.
  206.  
  207.  ----
  208.  
  209. I would like to thank the following people for help, suggestions and bug-reports:
  210.  
  211.   - Andreas Zunke (Na, wie geht's Deinem MEMCONTROL?)
  212.   - Stefan Dirnstorfer ( For math-hints )
  213.   - Morten Eriksen for the great but slow c2p/p2c routines
  214.   - various AMIGA-Magazines for programming tips and tricks
  215.  
  216.  ----
  217.  
  218.  
  219. THE FUTURE
  220. ==========
  221.  
  222. There are many things to do but the highest priority on my own  to-do-list  have
  223. those pretty routines for cpu-blitting from ChunkyPort to ChunkyPort and with or
  224. without a mask using.
  225.  
  226. Another one is to implement this functions as a standard amiga library.
  227.  
  228. Further I want to fix this ugly DrawEllipseChk() bug.  If  there's  anybody  out
  229. there  who knows of a good and fast standard Circle() routine, then please email
  230. me.
  231.  
  232. And if there's anybody out there who knows of  a  highly  optimized  speedy  c2p
  233. routine for standard amiga OS-Bitmaps as a replacement for the ones I used in my
  234. code, then please, please email me, too.
  235.  
  236. And your questions and suggestions are highly wellcome.
  237.  
  238. Write to:
  239.                                  Wanja Pernath
  240.                                   Joergstr. 74
  241.                                 D-80689 München
  242.  
  243.                                Tel.: 089/54662171
  244.  
  245.                      email: pernathw@cip.ub.uni-muenchen.de
  246.  
  247.  
  248.   ----
  249.  
  250.  
  251. And always remember:
  252.  
  253.             TAKE THIS PICE OF CODE AND PROGRAM GREAT AMIGA SOFTWARE
  254.  
  255.                            HELP THE AMIGA TO BE ALIVE
  256.  
  257.